www.gusucode.com > matlab最优化程序源码---书籍 > matlab最优化程序/光盘程序/第7章 无约束多维极值问题/minPS.m

    function [x,minf] = minPS(f,x0,delta,gama,sita,var,eps)
format long;
if nargin == 6
    eps = 1.0e-6;
end
k = 0;
n = length(var);

while 1
    y = x0;
    yf = Funval(f, var,y);
    for i=1:n
        tmpy = zeros(size(y));
        tmpy(i) = delta(i);
        tmpf = Funval(f, var,y+tmpy);
        if tmpf < yf
            y = y + tmpy;
        else
            tmpf = Funval(f, var,y-tmpy);
            if tmpf < yf
                y = y - tmpy;
            end
        end
    end
    x1 = y;
    fx1 = Funval(f, var,x1);
    if fx1 < yf
        y = x1 + gama*(x1 - x0);
    else
        tol = norm(delta);
        if tol<eps
            x = x0;
            break;
        else
            if x1~=x0
                y = x1;
            else
                y = x1;
                delta = sita*delta;
            end
        end
    end
    x0 = x1;
end
minf = Funval(f,var,x);
format short;